package com.lwz.servicebase.exceptionhandler;
import com.lwz.util.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author Lw中
 * @date 2020/11/5 20:51
 * 在当前类中，先回去找特定异常，如果没有会使用全局异常，最后的自定义异常要自己配
 */

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    /**
     * LWZ TODO : 2020/11/18 exception类
     */

    /**
     * 空指针异常处理
     * @param nullPointerException
     * @return
     */
    @ExceptionHandler(NullPointerException.class)
    @ResponseBody
    public R error(NullPointerException nullPointerException) {
        nullPointerException.printStackTrace();
        return R.error().message("空指针异常");
    }

    /**
     * @ExceptionHandler：指定出现什么异常执行这个方法
     * @RequestBody：为了返回数据
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e) {
        e.printStackTrace();
        return R.error().message("执行全局异常处理");
    }

    /**
     * 特定异常处理
     * @param arithmeticException
     * @return
     */
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public R error(ArithmeticException arithmeticException) {
        arithmeticException.printStackTrace();
        return R.error().message("执行了ArithmeticException异常处理..");
    }

    /**
     * 自定义异常处理
     * @param myException
     * @return
     */
    @ExceptionHandler(MyException.class)
    @ResponseBody
    public R error(MyException myException) {
        log.error(myException.getMessage());
        myException.printStackTrace();
        return R.error().code(myException.getCode()).message(myException.getMessage());
    }

}
